package com.kongchengji.zhanguafou.service;
import com.alibaba.fastjson.JSONObject;
import com.kongchengji.zhanguafou.constant.OCRAccesstoken;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

@Component
public class OCRAccessTokenService implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    // 获取token地址
                    String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
                    String getAccessTokenUrl = authHost
                            // 1. grant_type为固定参数
                            + "grant_type=client_credentials"
                            // 2. 官网获取的 API Key
                            + "&client_id=" + OCRAccesstoken.CLIENT_ID
                            // 3. 官网获取的 Secret Key
                            + "&client_secret=" + OCRAccesstoken.CLIENT_SECRET;
                    try {
                        URL realUrl = new URL(getAccessTokenUrl);
                        // 打开和URL之间的连接
                        HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
                        connection.setRequestMethod("GET");
                        connection.connect();
                        // 获取所有响应头字段
                        Map<String, List<String>> map = connection.getHeaderFields();
                        // 定义 BufferedReader输入流来读取URL的响应
                        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                        String result = "";
                        String line;
                        while ((line = in.readLine()) != null) {
                            result += line;
                        }
                        JSONObject jsonObject = JSONObject.parseObject(result);
                        String access_token = jsonObject.getString("access_token");
                        OCRAccesstoken.ACCESS_TOKEN = access_token;
                        System.err.println("accesstoken=" + access_token);
                        //access_token有效期为一个月
                        Thread.sleep(1000 * 60 * 60 * 24 * 20);
                    } catch (Exception e) {
                        System.err.printf("获取token失败！");
                        e.printStackTrace(System.err);
                    }
                }
            }
        });
        t.start();
    }
}
